package com.feel.modules.security.service.impl;

import cn.dev33.satoken.stp.StpUtil;
import com.feel.modules.app.dao.UserDao;
import com.feel.modules.app.dto.UserCurrentDto;
import com.feel.common.redis.RedisUtils;
import com.feel.modules.app.entity.UserEntity;
import com.feel.modules.security.service.UserCurrentService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;

/**
 * 用户表 serverImpl
 */
@Slf4j
public class UserCurrentServiceImpl implements UserCurrentService {

    @Autowired
    RedisUtils redisUtils;

    @Autowired
    UserDao userDao;

    @Override
    public UserCurrentDto getUserCurrent() {
        UserCurrentDto vo = null;
        Long userId = null;
        try {
            userId = StpUtil.getLoginIdAsLong();
        } catch (Exception e) {
            log.error("获取当前用户信息失败(可忽略)");
            return null;
        }
        String key = String.format("current:%s", userId);
        UserCurrentDto o = redisUtils.get(key, UserCurrentDto.class);
        if (o != null) {
            return o;
        } else {
            //查询数据库之后保存到redis
            vo = new UserCurrentDto();
            vo.setUserEntity(userDao.selectById(userId));
            redisUtils.set(key, vo);
        }
        return vo;
    }

    @Override
    public UserCurrentDto updateUserCurrent(UserEntity user) {
        userDao.updateById(user);
        Long userId = user.getUserId();
        String key = String.format("current:%s", userId);
        UserCurrentDto vo = new UserCurrentDto();
        vo.setUserEntity(user);
        redisUtils.set(key, vo);
        return vo;
    }

}
